package dp

import "math"

func maxProduct(nums []int) int {
	ans := math.MinInt32
	imax, imin := 1, 1
	for i := 0; i < len(nums); i++ {
		if nums[i] < 0 {
			imax, imin = imin, imax
		}
		imax = max(imax * nums[i], nums[i])
		imin = min(imin * nums[i], nums[i])
		ans = max(imax, ans)
	}
	return ans
}